package com.qcq.wecheck.entity;

import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * <p>
 * 签到表
 * </p>
 *
 * @author O
 * @since 2018-09-19
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class Schedule extends Model<Schedule> {

	private static final long serialVersionUID = 1L;

	/**
	 * 主键
	 */
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
	/**
	 * 创建人的openId
	 */
	@TableField("creator_id")
	@NotEmpty(message = "创建人openId不能为空")
	private String creatorId;
	/**
	 * 签到标题
	 */
	@NotEmpty(message = "标题不能为空")
	private String title;
	/**
	 * 是否要求gps签到
	 */
	@TableField("gps_tag")
	@NotNull(message = "必须指定gpsTag")
	private Integer gpsTag;
	/**
	 * 经度
	 */
	private Double longitude;
	/**
	 * 纬度
	 */
	private Double latitude;
	/**
	 * gps规定范围
	 */
	private Integer range;
	/**
	 * 经纬度所对应的地址名称
	 */
	private String location;
	/**
	 * 是否要求口令签到
	 */
	@TableField("keyword_tag")
	@NotNull(message = "必须指定keywordTag")
	private Integer keywordTag;
	/**
	 * 口令内容
	 */
	private String keyword;
	/**
	 * wifi ssid
	 */
	@TableField("wifi_ssid")
	private String wifiSsid;
	/**
	 * wifi的mac地址
	 */
	@TableField("wifi_mac")
	private String wifiMac;
	/**
	 * 是否要求wifi签到
	 */
	@TableField("wifi_tag")
	@NotNull(message = "必须指定wifiTag")
	private Integer wifiTag;
	/**
	 * 签到开始日期
	 */
	@TableField("start_date")
	@NotNull(message = "签到开始日期不能为空")
	@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
	private LocalDate startDate;
	/**
	 * 签到结束日期
	 */
	@TableField("end_date")
	@NotNull(message = "签到结束日期不能为空")
	@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
	private LocalDate endDate;
	/**
	 * 开始签到时间
	 */
	@TableField("check_start_time")
	@NotNull(message = "开始签到时间不能为空")
	@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
	private LocalTime checkStartTime;
	/**
	 * 停止签到时间
	 */
	@TableField("check_end_time")
	@NotNull(message = "停止签到时间不能为空")
	@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
	private LocalTime checkEndTime;
	/**
	 * 是否允许转发
	 */
	@TableField("forward_tag")
	@NotNull(message = "必须指定forwardTag")
	private Integer forwardTag;
	/**
	 * 要求每天签到的次数
	 */
	@TableField("check_count")
	@Range(min = 1, max = 4, message = "要求每天签到的次数只能1-4次")
	private Integer checkCount;
	/**
	 * 创建时间
	 */
	@TableField("create_time")
	@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
	private LocalDateTime createTime;
	/**
	 * 背景图片url
	 */
	@TableField("img_url")
	private String imgUrl;
	/**
	 * 考勤说明
	 */
	@NotEmpty(message = "考勤说明不能为空")
	private String description;

	@Override
	protected Serializable pkVal() {
		return this.id;
	}

}
